import Request from 'luch-request'
import Env from '@/env.js'
const http = new Request({
    baseURL: Env.BASE_API, //设置请求的base url
    timeout: 300000, //超时时长5分钟,
    header: {
        'Content-Type': 'application/json;charset=UTF-8;'
    },
    custom: {
        auth: true
    }
})

// 请求拦截
http.interceptors.request.use((config) => { // 可使用async await 做异步操作
    // 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
    config.data = config.data || {}
    // console.log("config", config)
    // console.log("config.custom", config.custom)
    // 根据custom参数中配置的是否需要token，添加对应的请求头
    const token = uni.getStorageSync('accessToken')
    if (config?.custom?.auth) {
        if (token) {
            config.header.Authorization = 'JWT ' + token
        } else {
            // 如果token 不存在则跳转到 登录 页面
            uni.reLaunch({
                route: '/page/login/index'
            })
            return Promise.reject(config)
        }
    }
    //console.log(433333, store.getters.hasApiPermission(config.url, config.method))
    return config
}, config => { // 可使用async await 做异步操作
    console.log("err", config)
    return Promise.reject(config)
})

// 响应拦截
http.interceptors.response.use((response) => {
    /* 对响应成功做点什么 可使用async await 做异步操作*/
    // uni.hideLoading();
    console.log("响应拦截 response.data", response)
    if (!response.config.custom.noBack && response.data.code === 401) { // token无效
        // 跳转登录页面
        uni.reLaunch({
            url: '/pages/login/index'
        });
        return Promise.reject(response)
    } else if (response.data.code !== 2000) {
        // 请求失败提醒
        uni.$showPrompt({
            content: response.data.msg,
            overClose: false,
            confirmColor: "bg-gradient-pink-accent",
        });
        return Promise.reject(response)
    }
    return response.data || {}
}, (response) => {
    /*  对响应错误做点什么 （statusCode !== 200）*/
    // console.log(response)
    if (response.statusCode !== 200) {
        // 错误提示
        console.log(response)
    }
    // uni.hideLoading();
    return Promise.reject(response)
})

export default http
